package com.sbm.merge.generic;



import java.util.ArrayList;
import java.util.List;

/**
 *
 *  1,什么java 泛型
 *     1， java 5 开始有的，通过类型擦除
 *
 *      使用类型擦除实现，即在编译的时候 将泛型的类型替换为原始类型（通常是Object） ,并插入必要的类型转换代码
 *
 *  2，他有什么用
 *      1，主要目的是提高类型安全
 *      2，可以提高代码的灵活性
 *      3，代码重用
 *      4，减少类型转换
 *
 *  3， 怎么使用，语法
 *       1，泛型方法
 *  *      1.2，泛型类
 *
 *      2,泛型边界符
 *       无界边界符
 *       上界边界符
 *       下界边界符
 */


public class Main {


    public static void main(String[] args) {

//        BlackBox blackBox = new BlackBox(new BlackBall("黑色球"));
//
//        blackBox.print();
//
//        Box<BlackBall> blackBall = new Box<>(new BlackBall("黑色球"));
//
//        blackBall.print();

//        Box<Car> box = new Box<>(new MinBusCar());
//
//        box.print();

        List<String> strings = new ArrayList<>();

        strings.add("hello");
        List<Integer> integers = new ArrayList<>();

        integers.add(123);


//        print(strings);
//
//
//        print3(strings);
//        print3(integers);
//
//        print1(strings);
//        print1(integers);
//
        print2(strings.toArray());
        print2(integers.toArray());


    }


    public static <T> void print(List<T> list){


        for (T t : list) {
            System.out.println(t);
        }

    }




    public static void print1(List<?> list){

        for (Object o : list) {
            System.out.println(o);
        }
    }




    public static  void print2(Object[] list){


        for (Object t : list) {
            System.out.println(t);
        }

    }


    public static void print3(List<Object> list){


        for (Object t : list) {
            System.out.println(t);
        }

    }






}
